package com.relytosoft.mizar.media.analyze.services.service.behavior;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.relytosoft.dubhe.common.core.base.page.PageQuery;
import com.relytosoft.mizar.media.analyze.api.entity.behavior.AyBehaviorTask;
import com.relytosoft.mizar.media.analyze.api.entity.behavior.AyBehaviorTaskSon;
import com.relytosoft.mizar.media.analyze.api.pojo.dto.AyBehaviorTaskDto;
import com.relytosoft.mizar.media.analyze.api.pojo.query.AyBehaviorTaskQuery;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyBatchVo;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyBehaviorTaskVo;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyEventTypeVo;

import java.util.List;

/**
 * @author lj
 * @date 2022/6/7 10:05
 */
public interface AyBehaviorTaskService extends IService<AyBehaviorTask> {

    /**
     * 分页条件查询行为分析任务
     *
     * @param pageQuery           分页对象
     * @param ayBehaviorTaskQuery 查询条件
     * @return 分页结果
     */
    Page<AyBehaviorTaskVo> selectAyBehaviorTaskPageList(PageQuery pageQuery, AyBehaviorTaskQuery ayBehaviorTaskQuery);

    /**
     * 封装行为分析主任务信息
     *
     * @param ayBehaviorTaskDto 行为分析主任务信息
     * @return 行为分析主任务信息
     */
    AyBehaviorTask getAyBehaviorTask(AyBehaviorTaskDto ayBehaviorTaskDto);


    /**
     * 封装行为分析子任务信息
     *
     * @param ayBehaviorTask 行为分析主任务信息
     * @return 行为分析子任务信息
     */
    List<AyBehaviorTaskSon> getAyBehaviorTaskSon(AyBehaviorTask ayBehaviorTask);

    /**
     * 插入主任务
     * 批量插入行为分析子任务信息
     *
     * @param ayBehaviorTask        行为分析主任务信息
     * @param ayBehaviorTaskSonList 行为分析子任务信息
     * @param ayBatchVo             结果信息
     * @return 插入结果
     */
    boolean saveAyBehaviorTaskAndSon(AyBehaviorTask ayBehaviorTask, List<AyBehaviorTaskSon> ayBehaviorTaskSonList, AyBatchVo ayBatchVo);


    /**
     * 校验参数获取需要删除的数据
     *
     * @param ids 行为分析子任务id
     * @return 更新结果
     */
    List<AyBehaviorTask> checkDelete(List<Integer> ids);


    /**
     * 删除行为分析主任务和子任务
     *
     * @param ids                行为分析主任务id
     * @param ayBehaviorTaskList 行为分析主任务需要删除的信息
     * @return 删除结果
     */
    boolean deleteAyBehaviorTask(List<Integer> ids, List<AyBehaviorTask> ayBehaviorTaskList);

    /**
     * 根据主任务id校验是否有需要启动的子任务
     *
     * @param ids 行为分析主任务id
     * @return 校验结果
     */
    AyBatchVo checkStart(List<Integer> ids);

    /**
     * 查询能启动的行为分析子任务
     *
     * @param behaviorTaskId 行为分析主任务id
     * @return 可以启动的行为分析子任务
     */
    List<AyBehaviorTaskSon> selectCanStartSonTask(List<Integer> behaviorTaskId);

    /**
     * 启动行为分析子任务
     *
     * @param ayBehaviorTaskSonList 行为分析子任务
     * @param ayBatchVo             结果信息
     * @param insertTaskSons        插入的子任务
     * @param startTaskSons         启动的子任务
     */
    void startTask(List<AyBehaviorTaskSon> ayBehaviorTaskSonList, AyBatchVo ayBatchVo, List<AyBehaviorTaskSon> insertTaskSons, List<AyBehaviorTaskSon> startTaskSons);

    /**
     * 根据主任务id校验是否有需要停止的任务
     *
     * @param ids 行为分析主任务id
     * @return 校验结果
     */
    AyBatchVo checkStop(List<Integer> ids);

    /**
     * 查询能停止的行为分析子任务
     *
     * @param behaviorTaskIds 行为分析主任务id
     * @return 可以停止的行为分析子任务
     */
    List<AyBehaviorTaskSon> selectCanStopSonTask(List<Integer> behaviorTaskIds);

    /**
     * 停止行为分析子任务
     *
     * @param ayBehaviorTaskSonList 行为分析子任务
     * @param ayBatchVo             结果信息
     * @param stopTaskSons          停止的子任务
     */
    void stopTask(List<AyBehaviorTaskSon> ayBehaviorTaskSonList, AyBatchVo ayBatchVo, List<AyBehaviorTaskSon> stopTaskSons);

    /**
     * 查询任务选择列表
     *
     * @return 任务选择列表
     */
    List<JSONObject> selectAyBehaviorList();

    /**
     * 处理主任务状态
     *
     * @param parentId 主任务id
     * @param value    状态值
     */
    void taskStatusHandle(Integer parentId, int value);


    /**
     * 查询列表信息
     *
     * @param parentId 父ID
     * @return 列表信息
     */
    List<AyEventTypeVo> selectEventByParentId(Integer parentId);
}
